#include "my_lib/encoder.h"


#include "stdint.h"

void EncoderInit(void)
{
    GTIM_InitTypeDef GTIM_InitStruct;
	GTIM_EncodeInitTypeDef GTIM_EncodeInitStruct;
    GPIO_InitTypeDef GPIO_InitStruct;
    //时钟
	RCC_APBPeriphClk_Enable2(RCC_APB2_PERIPH_GTIM3,ENABLE);//初始化GTIM4的时钟
	RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_GTIM2,ENABLE);//初始化GTIM2的时钟    
    RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA,ENABLE);//初始化GPIOA的时钟

    //引脚
	PA06_AFx_GTIM3CH1() ;	//GPIOA6复用
	PA10_AFx_GTIM3CH2();	//GPIOA10复用
    PA05_AFx_GTIM2CH1();    //GPIOA5复用
    PA03_AFx_GTIM2CH2();    //GPIOA3复用 

	PA06_DIGTAL_ENABLE();	//数字模式
	PA10_DIGTAL_ENABLE();	//数字模式
	PA03_DIGTAL_ENABLE(); 	//数字模式
	PA05_DIGTAL_ENABLE();	//数字模式

	GPIO_InitStruct.Pins = GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_10;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;		//输入模式
	GPIO_InitStruct.IT = GPIO_IT_NONE;			//端口不中断
	GPIO_Init(CW_GPIOA,&GPIO_InitStruct);		//初始化GPIOA

    //encoder
	GTIM_InitStruct.Mode = GTIM_MODE_TIME;				//计数模式
	GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;	//连续计数
	GTIM_InitStruct.Prescaler = GTIM_ETR_FILTER_NONE;	//PSC不分频
	GTIM_InitStruct.ReloadValue = 65536-1;				//ARR重装载值
	GTIM_InitStruct.ToggleOutState = DISABLE;			//不使能翻转输出
	GTIM_TimeBaseInit(CW_GTIM3,&GTIM_InitStruct);		//初始化GTIM3
    GTIM_TimeBaseInit(CW_GTIM2,&GTIM_InitStruct);		//初始化GTIM2
	
	
	GTIM_EncodeInitStruct.EncodeMode = GTIM_ENCODE_MODE3;				//模式3
	GTIM_EncodeInitStruct.EncodeReloadMode = GTIM_ENCODE_RELOAD_RISE;	//上升沿重载
	GTIM_EncodeInitStruct.EncodeResetMode = GTIM_ENCODE_RESET_RISE;		//上升沿复位
	GTIM_EncodeInitStruct.CH1Filter = GTIM_CHx_FILTER_PCLKDIV8_N6;		//滤波
	GTIM_EncodeInitStruct.CH1Invert = GTIM_CHx_INVERT_OFF;				//不打开反转
	GTIM_EncodeInit(CW_GTIM3,&GTIM_EncodeInitStruct);					//初始化编码器
    GTIM_EncodeInit(CW_GTIM2,&GTIM_EncodeInitStruct);					//初始化编码器

	GTIM_Cmd(CW_GTIM3,ENABLE);
	GTIM_Cmd(CW_GTIM2,ENABLE);
}


int Get_Counter_GTIM3(void)
{
	return CW_GTIM3->CNT;
}

int Get_Counter_GTIM2(void)
{
	return CW_GTIM2->CNT;
}

void Clear_Counter_GTIM2(void)
{
	GTIM_SetCounterValue(CW_GTIM2,0);
}

void Clear_Counter_GTIM3(void)
{
	GTIM_SetCounterValue(CW_GTIM3,0);
}



